package com.wwe.kotlinstudy.example23

import kotlin.reflect.KProperty

/**
 * @name KotlinStudy
 * @package name：com.wwe.kotlinstudy.example23
 * @anthor DavidZhang
 * @time 2018/4/30 10:15
 * @class describe
 */
class Secretary {

    //thisRef==被代理的类，property存储了被代理的属性，
    // property.name则为属性的名称,注意不是属性的值
    // value为给被代理字段赋值时传递的值。
    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
        return "$thisRef, thank you for delegating '${property.name}' to me!"
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
        println("$value has been assigned to '${property.name} in $thisRef.'")
    }
}

//如上，其代理原理为:

//1、被代理字段workd的setter()会委托给代理类的setValue()方法；
//2、被代理字段workd的getter()会委托给代理类的getValue()方法；
//所以设置了代理类之后，当被代理的字段发生变化时，我们便可在代理类里面进行接收和处理。